const { EvaluateModel, UserModel, PropertyModel } = require('../../models/index')

// 提交用户评价信息
const submitRateInfo = async (req, res) => {
  try {
    // 个人信息为空的情况
    if (!req.body) {
      return res.status(400).json({ error: '用户评价信息不能为空！' })
    }

    // 创建新的用户评价
    const newEvaluate = {
      property_id: req.body.property_id,
      user_id: req.body.user_id,
      rating: req.body.rateValue,
      comment: req.body.comment || null
    }

    // 提交用户评价信息到数据库
    const evaluate = await EvaluateModel.create(newEvaluate)

    // 更新成功的响应
    res.status(200).json({
      title: '提交成功',
      message: evaluate
    })


  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}

// 获取用户评价信息
const getRateInfo = async (req, res) => {
  try {
    const id = req.params.id

    // 获取页码和每页大小
    const { page, pageSize } = req.query

    // 用户ID不存在的情况
    if (!id || isNaN(parseInt(id, 10))) {
      return res.status(400).json({ error: '无效的用户ID' })
    }

    // 确保页码和每页大小是有效的数字
    if (isNaN(parseInt(page, 10)) || isNaN(parseInt(pageSize, 10)) || pageSize <= 0) {
      return res.status(400).json({ error: '无效的页码或每页大小' })
    }

    // 计算offset
    const offset = (parseInt(page, 10) - 1) * parseInt(pageSize, 10)

    // 查找用户的评价记录
    const evaluateInfo = await EvaluateModel.findAndCountAll({
      where: {
        user_id: id
      },
      include: [
        {
          model: UserModel,
          as: 'user',
          attributes: ['id', 'username']
        }, {
          model: PropertyModel,
          as: 'property',
          attributes: ['id', 'title', 'image_url']
        }
      ],
      offset: offset,
      limit: parseInt(pageSize, 10)
    })

    // 没有找到评价信息的情况
    if (evaluateInfo.length === 0) {
      return res.status(404).json({ error: '没有找到预约信息！' })
    }

    // 返回评价信息查找成功时的响应
    res.status(200).json({
      title: '查询成功',
      data: evaluateInfo
    })

  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}


module.exports = {
  submitRateInfo,
  getRateInfo
}